package sto.orz.html;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import sto.orz.html.form.ExtendMode;

// XXX can leave out?
/********************************************
 * 说明:
 * 本标注应标注与域对象字段上。
 * 1) 如果是关联对象(不是简单数据类型),则必须设置关联字段名;
 * 2) 所生成表单元素的id:
 *    id = "字段名";
 *    如果构造表单时指定了表单名,则 id = "表单名.字段名";
 *    如果指定了关联字段名,则 id = "表单名.关联字段名"
 * 	
 *******************************************/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Element {
	/*******************************************
	 * 标签名
	 * 用于在该表单域的标签显示 : "<label></label>"。
	 * 优先级顺序:
	 * 1) annotation
	 * 2) application.properties
	 * 3) fieldname
	 *******************************************/
	String label() default "";

	/*******************************************
	 * 关联字段名
	 * 用于关联对象，表示该表单域映射到一个关联对象字段。
	 *******************************************/
	String mapping() default "";
	
	/*******************************************
	 * 表单域类型
	 * 如 TEXTBOX,SELECTBOX..
	 * 可选值参见 @see sto.orz.html.ElementType
	 *******************************************/
	sto.orz.html.ElementType elementType() default sto.orz.html.ElementType.TEXTBOX;

	/*******************************************
	 * 扩展类型
	 * 用于包含,或者抽取关联对象到表单里面.
	 * 可选值参见 @see sto.orz.html.form.ExtendMode
	 *******************************************/
	ExtendMode extendMode() default ExtendMode.NONE;
}
